<?php
function king($m, $n)
{
    //构建初始序列，记录m只猴子在圈中
    $data = array_fill(0, $m, 1);

    $t=-1;                          //首次报数将从起始位置为0，即第1只猴子开始，因为在使用$data[$t]前$t要加1

    for ($i=1; $i<=$m; $i++)        //循环要执行m次，有m个猴子要出圈
    {
        $j=1;      // j用于报数

        // 报数过程
        while($j <= $n)
        {
            // 看下一只猴子，到达最后时要折回去，所以用% $m
            // 首次报数将从起始位置为0，即第1只猴子开始，因为在使用$data[$t]前$t要加1 【循环报数】
            $t = ($t+1) % $m;

            // 仅当q猴子在圈中，这个位置才报数
            if ($data[$t] == 1) {
                $j++;
            }
        }

        //将最后一个报数猴子出圈
        $data[$t] = 0;
    }

    return $t+1;
}

king(8, 4);